package bitclub;

import herramientas.BitUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TreeSet;
import persistencia.PAlquiler;

/**
 * @author BIT COMPANY
 */
public class Alquiler {

    private Cliente cliente;
    private Date fechaAlquiler;
    private TreeSet<ArticuloAlquilado> listArticulos;
    private double precioAlquiler;
    private double precioRecargo;
    private Trabajador trabajador;
    private int id;

    public Alquiler(Cliente cliente, Date fechaAlquiler, TreeSet<ArticuloAlquilado> listArticulos, double precioAlquiler, double precioRecargo, Trabajador trabajador) {
        this.cliente = cliente;
        this.fechaAlquiler = fechaAlquiler;
        this.listArticulos = listArticulos;
        this.precioAlquiler = precioAlquiler;
        this.precioRecargo = precioRecargo;
        this.trabajador = trabajador;
    }

    public Alquiler() {
    }

    public Cliente getCliente() {
        return cliente;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Date getFechaAlquiler() {
        return fechaAlquiler;
    }

    public void setFechaAlquiler(Date fechaAlquiler) {
        this.fechaAlquiler = fechaAlquiler;
    }

    public TreeSet<ArticuloAlquilado> getListArticulos() {
        return listArticulos;
    }

    public void setListArticulos(TreeSet<ArticuloAlquilado> listArticulos) {
        this.listArticulos = listArticulos;
    }

    public double getPrecioAlquiler() {
        return precioAlquiler;
    }

    public void setPrecioAlquiler(double precioAlquiler) {
        this.precioAlquiler = precioAlquiler;
    }

    public double getPrecioRecargo() {
        return precioRecargo;
    }

    public void setPrecioRecargo(double precioRecargo) {
        this.precioRecargo = precioRecargo;
    }

    public Trabajador getTrabajador() {
        return trabajador;
    }

    public void setTrabajador(Trabajador trabajador) {
        this.trabajador = trabajador;
    }

    @Override
    public String toString() {

        String resultado = "";

        resultado += "________________________________________________________________\n";
        resultado += "Cliente:      " + cliente.getNombre() + " " + cliente.getApellidos() + "\n";
        resultado += "Fecha:        " + BitUtil.muestraFecha(this.fechaAlquiler) + "\n";
        resultado += "________________________________________________________________\n";

        for (ArticuloAlquilado aa : listArticulos) {
            resultado += "              " + aa.toString() + "\n";
        }

        resultado += "________________________________________________________________\n";
        resultado += "Total:        " + BitUtil.muestraEuros(this.precioAlquiler) + "\n";

        if (this.getTrabajador() != null) {
            resultado += "Atendido por: " + trabajador.getNombre() + " " + trabajador.getApellidos() + "\n";
        } else {
            resultado += "              Realizado en Cajero.";
        }
        return resultado;
    }

    public double precioAlquiler(TreeSet<ArticuloAlquilado> listArticulos) {
        double precioTotal = 0;
        for (ArticuloAlquilado aa : listArticulos) {
            precioTotal += aa.getPrecioAlquiler();
        }
        return precioTotal;
    }

    public void nuevo() {
        PAlquiler.nuevoBD(this);
    }

    public void actualizar() {
        PAlquiler.actualizarBD(this);
    }

    public static List<Alquiler> seleccionarAlquilerCliente(Cliente cliente) {
        List<Alquiler> listArquileres = new ArrayList();
        listArquileres = PAlquiler.seleccionarAlquilerClienteBD(cliente);
        return listArquileres;
    }

    @Override
    public boolean equals(Object obj) {
        Alquiler alquiler = (Alquiler) obj;
        if (alquiler.getId() == this.getId()) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 67 * hash + this.id;
        return hash;
    }
}
